package framework.service {
	import framework.signals.RequestedContentSignal;

	/**
	 * @author Charlie MacIsaac
	 */
	
	public class FileRetrieverService implements IRetrieverService {
		// PROPERTIES =============================================================================
		[Inject]	public var parser : IParser;
		[Inject]	public var loader : LoaderSignalsWrapper;
		[Inject]	public var dataStore : RetrievalDataStore;
		
		private var _name : String;
		private var _fileReceiverCallBack : Function;
		
		// GETTERS + SETTERS ======================================================================
		// CONSTRUCTOR ============================================================================
		public function FileRetrieverService() { }
		
		// PUBLIC =================================================================================
		public function retrieve(name : String, receiver : Function) : void {
			if (dataStore.retrieve(name)) {
				receiver(dataStore.retrieve(name));
			} else {
				_fileReceiverCallBack = receiver;
				_name = name;
				
				loader.complete.addOnce(loadCompleteHandler);
				loader.load(_name);
			}
		}
		
		// PRIVATE ================================================================================
		// LISTENERS ==============================================================================
		private function loadCompleteHandler(loadedObject : Object) : void {
			var parsedObject : Object = parser.parse(loadedObject);
			
			loader.complete.removeAll();
			_dataStore.store(_name, parsedObject);
			_fileReceiverCallBack(parsedObject);
		}
	}
}